﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using vudu.Logica.Clases;
using System.IO;

namespace vudu.EnlaceDatos.SqlServer
{
    public class SqlServerArchivoPdf
    {
                

        public DataTable consultarArchivoProfesor(int idProfesor, int NumeroSeccion)
        {
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;

            try
            {
               
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarArchivoPdf]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idProfesor", idProfesor);
                command.Parameters.AddWithValue("@NumeroSeccion",NumeroSeccion);
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@NumeroSeccion"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto datatable
                DataTable dtt = new DataTable();
                dtt.Load(command.ExecuteReader(), LoadOption.OverwriteChanges);

                
                
                return dtt;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

        }

        public DataTable consultarArchivoEstudiante(int idSeccion)
        {
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;

            try
            {

                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarArchivoPdfEstudiante]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idSeccion", idSeccion);
                command.Parameters["@idSeccion"].Direction = ParameterDirection.Input;
                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo DataTable
                DataTable dtt = new DataTable();
                dtt.Load(command.ExecuteReader(), LoadOption.OverwriteChanges);
                              
                return dtt;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

        }

        public List<SeccionMateria> ConsultarSeccionesProfesorArchivoPdf(Profesor profesor)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarMateriasProfesorArchivoPdf]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idProfesor", profesor.Cedula);
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en una lista de objeto de tipo SeccionMateria
                List<SeccionMateria> materiasProfesor = new List<SeccionMateria>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    SeccionMateria seccionMateria = new SeccionMateria();
                    seccionMateria.Materia.Nombre = reader.GetString(0);
                    materiasProfesor.Add(seccionMateria);

                }
                return materiasProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<OperacionesPdf> ConsultarCategoriaProfesorArchivoPdf(Profesor profesor,int idSeccion)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarCategoriaProfesorArchivoPdf]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idSeccion", idSeccion);
                command.Parameters.AddWithValue("@idProfesor", profesor.Cedula);
                command.Parameters["@idSeccion"].Direction = ParameterDirection.Input;
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                //se ejecuta el comando
                //se carga la informacion consultada en una lista de objeto de tipo OperacionesPdf
                List<OperacionesPdf> categoriaProfesor = new List<OperacionesPdf>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    OperacionesPdf miCategoria = new OperacionesPdf();
                    miCategoria.categoria = reader.GetString(0);
                    categoriaProfesor.Add(miCategoria);                  

                }
                return categoriaProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<OperacionesPdf> ConsultarNombreArchivoPdf(Profesor profesor, int idSeccion, String nombreCategoria)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarNombreArchivoPdf]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idSeccion", idSeccion);
                command.Parameters.AddWithValue("@idProfesor", profesor.Cedula);
                command.Parameters.AddWithValue("@nombreCategoria", nombreCategoria);
                command.Parameters["@idSeccion"].Direction = ParameterDirection.Input;
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@nombreCategoria"].Direction = ParameterDirection.Input;
                //se ejecuta el comando
                //se carga la informacion consultada en una lista de objeto de tipo OperacionesPdf
                List<OperacionesPdf> categoriaProfesor = new List<OperacionesPdf>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    OperacionesPdf miCategoria = new OperacionesPdf();
                    miCategoria.idArchivo = reader.GetInt32(0);
                    miCategoria.nombreArchivo = reader.GetString(1);
                    miCategoria.rutaArchivoPdf = new FileInfo(reader.GetString(2));
                    miCategoria.categoria = reader.GetString(3);
                    categoriaProfesor.Add(miCategoria);

                }
                return categoriaProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<SeccionMateria> ConsultarSeccionesEstudianteArchivoPdf(Estudiante estudiante)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarDatosMateriaEstudianteArchivoPdf]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idEstudiante", estudiante.Cedula);
                command.Parameters["@idEstudiante"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en una lista de objeto de tipo SeccionMateria
                List<SeccionMateria> materiasProfesor = new List<SeccionMateria>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    SeccionMateria seccionMateria = new SeccionMateria();
                   
                    seccionMateria.Codigo = reader.GetInt32(0);
                    seccionMateria.Materia.Nombre = reader.GetString(1);
                    seccionMateria.IdSeccionMateria = reader.GetInt32(2);
                    materiasProfesor.Add(seccionMateria);

                }
                return materiasProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<SeccionMateria> ConsultarDatosSeccionProfesorArchivoPdf(Profesor profesor, SeccionMateria seccion)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarDatosMateriasProfesorArchivoPdf]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idProfesor", profesor.Cedula);
                command.Parameters.AddWithValue("@nombreMateria", seccion.Materia.Nombre);
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@nombreMateria"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en una lista de objeto de tipo SeccionMateria
                List<SeccionMateria> materiasProfesor = new List<SeccionMateria>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    SeccionMateria seccionMateria = new SeccionMateria();
                    seccionMateria.Codigo = reader.GetInt32(0);
                    seccionMateria.IdSeccionMateria = reader.GetInt32(1);

                    materiasProfesor.Add(seccionMateria);

                }
                return materiasProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public void InsertarArchivoPdf(OperacionesPdf archivoPdf,float tamañoArchivo,Profesor profesor,string seccion)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            try
            {
                miConexion.AbrirConexionBd(); //se abre una conexion a base de datos

                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[InsertarArchivoPdf]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@nombre",archivoPdf.nombreArchivo);
                command.Parameters.AddWithValue("@ruta", archivoPdf.rutaArchivoPdf.ToString());
                command.Parameters.AddWithValue("@categoria",archivoPdf.categoria);
                command.Parameters.AddWithValue("@fk_profesor", profesor.Cedula);
                command.Parameters.AddWithValue("@fk_SeccionMateria",seccion);
                command.Parameters.AddWithValue("@espacioUtilizado", tamañoArchivo);

                command.Parameters["@nombre"].Direction = ParameterDirection.Input;
                command.Parameters["@ruta"].Direction = ParameterDirection.Input;
                command.Parameters["@categoria"].Direction = ParameterDirection.Input;
                command.Parameters["@fk_profesor"].Direction = ParameterDirection.Input;
                command.Parameters["@fk_SeccionMateria"].Direction = ParameterDirection.Input;
                command.Parameters["@espacioUtilizado"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                command.ExecuteReader();
               
            }
            catch (SqlException)
            {
                //return -1;
            }
            catch (Exception e)
            {
                //return -1;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                miConexion.CerrarConexionBd();
            }
        }

        public void EliminarArchivoPdf(int idArchivo,float tamañoActual, Profesor profesor)
        {
            
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            try
            {
                miConexion.AbrirConexionBd(); //se abre una conexion a base de datos

                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[EliminarArchivoPdf]";
                command.CommandTimeout = 10;


                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idArchivo",idArchivo);
                command.Parameters.AddWithValue("@tamañoActual", tamañoActual);
                command.Parameters.AddWithValue("@idProfesor", profesor.Cedula);
                command.Parameters["@idArchivo"].Direction = ParameterDirection.Input;
                command.Parameters["@tamañoActual"].Direction = ParameterDirection.Input;
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
              
                

                //se ejecuta el comando
                command.ExecuteReader();
               
            }
            catch (SqlException)
            {
                //return -1;
            }
            catch (Exception e)
            {
                //return -1;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                miConexion.CerrarConexionBd();
            }
        }
       
    }
}